package Model;

import Model.Exceptions.LoginException;
import java.io.Serializable;

/**
 * La classe LocalUserLogin represente le login de l'utilisateur local 
 * @author      Frank Djomo
 * @author      Christelle SIAGO HAPPI
 * @author      djomopoueme@gmail.com
 * @author      christelle.siagohappi@gmail.com
 * @version     1.0
 */
public class LocalUserLogin implements Serializable {
    /**
    * 
    */
    private static final long serialVersionUID = -8803734957387514895L;
    /**
    * La taille maximum du login
    */
    final static public int MAX_SIZE = 20;
    /**
    * La taille minimum du login
    */
    final static public int MIN_SIZE = 1;
    /**
     * L'username
     */
    private String m_Username;
    /**
    * Créer un utilisateur local 
    * @param login Login de l'utilisateur local
    * @throws LoginException Exception jéter si le login n'est pas valide
    */
    public LocalUserLogin(String login) throws LoginException {
      if( LocalUserLogin.checkUsername(login) == false) throw new LoginException("Username invalide");

      this.m_Username = login;
    }

    /**
    * Copie d'un login
    * @param login Login à copier
    */
    public LocalUserLogin(LocalUserLogin login)  {
        this.m_Username = login.getUsername();
    }

    /**
    * 
    * @return le login de l'utilisateur local
    */
    public final String getUsername() {
        return this.m_Username;
    }
    /**
    * 
    */
    @Override
    public String toString() {
        return this.getUsername();
    }
    /**
    * 
    */
    @Override
    public boolean equals(Object o) {
        return (this.getClass().isInstance(o) && this.getUsername().equals(((LocalUserLogin)o).getUsername()));
    }
    /**
    * 
    */
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 47 * hash + (this.m_Username != null ? this.m_Username.hashCode() : 0);
        return hash;
    }

    /**
    * Teste si un login est valide
    * @param login L'username à tester
    * @return resultat du controle
    *        <code>true</code> si login valide existe
    *        <code>false</code> sinon
    */
    public static boolean checkUsername(String login) {
        return (login != null && login.length() >= LocalUserLogin.MIN_SIZE && login.length() <= LocalUserLogin.MAX_SIZE);
    }
}
